# coding=utf-8

from pymongo import MongoClient
from bs4 import BeautifulSoup
import requests
import datetime
import pprint
import json
import time
import re

server_client = MongoClient('127.0.0.1', 27017)

server_db = server_client['knx_posts_db']
offical_posts_coll = server_db['offical_posts_coll']

# class POST():
#     def __init__(self):
#         self.company = '联想集团'
#         self.url = "http://campus.lenovo.com.cn/lenovo/campus/recruit/getJobByParams"
#         self.params = {
#
#         }
#         self.data = {
#
#         }
#
#         self.scrapy()
#
#     def scrapy(self):
#         r = requests.get(self.url)
#         j = r.json()
#         for job in j['result']:
#             url = job['url_web']
#             description = job['jd']
#             name = job['name']
#             location = job['province']
#             count = job['number']
#             edu = job['requireedu']
#             date = job['updated_at']
#             funType = job['type']
#             item = {
#                 "url": url,  # jd详情页的地址
#                 'edu': edu,  # 最低学历
#                 'exp': [],  # 所需工作经验，比如[3, 5]表示3到5年, [3]表示3年，[]表示无经验要求
#                 'name': name,  # 职位名称 *
#                 'date': date,  # 职位发布日期，字符串形式即可，后期统一转换
#                 'lang': '',  # 对语言的要求
#                 'place': '',  # 办公具体地址
#                 'major': '',  # 专业要求
#                 'count': count,  # 招聘数量
#                 'salary': [],  # 薪资待遇，[5000, 8000]表示月薪5到8千，[4000]表示4千，[]表示没有写明
#                 'toSchool': True,  # 是否是面向校园招聘，本次官网抓取一律都是校园招聘，所以此处都是True
#                 'welfare': [],  # 福利待遇，比如五险一金、十三薪之类的，保存成数组
#                 'funType': funType,  # 职能类型，比如证券经纪人是证券 / 期货 / 外汇经纪人
#                 'company': self.company,  # 企业名称
#                 'location': location,  # 所在城市
#                 'industry': 'IT互联科技行业',  # 企业所在行业
#                 'keywords': [],  # 此岗位的搜索关键字
#                 'platform': 'offical',  # 针对官网抓取时此处一律保存为offical
#                 'searchKeyword': '',  # 搜索的关键字，由于是官网抓取所以此处一律为空字符串
#                 'description': description,  # 职位的详细描述，包括职责、要求之类的
#                 'subIndustry': '',  # 一律为空字符串
#                 'stime': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 抓取时间
#             }
#             print(item['company'], item['name'])
#             if not offical_posts_coll.find_one({'name': item['name'], 'company': item['company'], 'location': item['location']}):
#                 offical_posts_coll.insert_one(item)
#
#
# POST()

for page in range(1, 27):
    source = requests.get('https://talent.lenovo.com.cn/campus?id=2&page=' + str(page)).text
    soup = BeautifulSoup(source, 'lxml')

    for item in soup.select('.cam_table tr')[1:]:
        s = BeautifulSoup(requests.get(item.find('a').get('href')).text, 'lxml')
        name = s.find('h2').text
        location = s.find(text = re.compile('工作地点：')).parent.get_text().split('：')[1]
        edu = s.find(text = re.compile('学历要求：')).parent.get_text().split('：')[1]
        description = s.find(class_ = 'postdelivery_bottom').get_text().strip()
        company = '联想集团'

        item = {
            "url": '',  # jd详情页的地址
            'edu': edu,  # 最低学历
            'exp': [],  # 所需工作经验，比如[3, 5]表示3到5年, [3]表示3年，[]表示无经验要求
            'name': name,  # 职位名称 *
            'date': '',  # 职位发布日期，字符串形式即可，后期统一转换
            'lang': '',  # 对语言的要求
            'place': '',  # 办公具体地址
            'major': '',  # 专业要求
            'count': '',  # 招聘数量
            'salary': [],  # 薪资待遇，[5000, 8000]表示月薪5到8千，[4000]表示4千，[]表示没有写明
            'toSchool': True,  # 是否是面向校园招聘，本次官网抓取一律都是校园招聘，所以此处都是True
            'welfare': [],  # 福利待遇，比如五险一金、十三薪之类的，保存成数组
            'funType': '',  # 职能类型，比如证券经纪人是证券 / 期货 / 外汇经纪人
            'company': company,  # 企业名称
            'location': location,  # 所在城市
            'industry': 'IT互联科技行业',  # 企业所在行业
            'keywords': [],  # 此岗位的搜索关键字
            'platform': 'offical',  # 针对官网抓取时此处一律保存为offical
            'searchKeyword': '',  # 搜索的关键字，由于是官网抓取所以此处一律为空字符串
            'description': description,  # 职位的详细描述，包括职责、要求之类的
            'subIndustry': '',  # 一律为空字符串
            'stime': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 抓取时间
        }

        pprint.pprint(item)
